﻿//////////////////////////////////////////////////////////////////////////////
//
//  Copyright © 1998-2024 Glodon Company Limited.  All rights reserved.
//
//  Use of this software is subject to the terms of the Glodon license
//  agreement provided at the time of installation or download, or which
//  otherwise accompanies this software in either electronic or hard copy form.  
//
//////////////////////////////////////////////////////////////////////////////


#pragma once
#include <string>
#include <vector>
#include "OwnerPtr.h"
#include "GcmpSkpInterface.h"


namespace gcmp
{
    class IBody;

    /// \brief 数据格式写为外部数据格式的成功或失败错误码
    enum class SATExportErrorTypeInfo : int32_t
    {
        LicenseError = 0,             ///< 许可证问题
        BodySuccess = 1,                  ///< 写SAT成功（目前仅支持写为sat数据格式，后续可能扩展）
        NullSurface = 2,                  ///< 面为空
        NullCurve3d = 3,                  ///< 曲线为空
        LoopSelfint = 4,                  ///< 环loop自交
        EdgeVertexTol = 5,                ///< Edge端点容差问题
        FaceEdgeTol = 6,                  ///< Face与Edge缝隙容差问题
        FixedFailure = 7,                 ///< 修复失败
        CheckInvalid = 8,                 ///< 检查
        Other = 9                         ///< 其他未知问题
    };


    /// \brief SAT导出
    ///
    class GCMP_SKP_INTERFACE_EXPORT ExportUtils final
    {
    public:
        /// \brief 将多个GGP的body转换并输出sat格式文件
        ///
        /// \param bodyList  GGP的body集合
        /// \param strFileName  输出sat文件的路径字符串
        /// \param fixModel  是否需要修正
        /// \return std::vector<SATExportErrorTypeInfo> 返回转换信息
        static std::vector<SATExportErrorTypeInfo> WriteSat(const std::vector<IBody*>& bodyList, const std::wstring& strFileName, bool fixModel = false);

    };

}
